﻿/*
 * File nay se chua tat ca cac ham de thao tac den
 * CSDL trong chuong trinh
 */

using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System;
using QLMB.ViewModels;

namespace QLMB.Models
{
    public interface IBookTicketRepository
    {
        #region Book Ticket
        IDictionary<string, string> LayDSSanbaydi();
        IEnumerable<CHUYENBAY> LayDSChuyenBay(DateTime Ngaydi, string Sanbaydi, string Sanbayden);
        Decimal TimGiaThapNhatTrongNgay(DateTime Ngaybay, string Sanbaydi, string Sanbayden);
        CHUYENBAY TimCBGiaThapNhat(DateTime Ngaybay, string Sanbaydi, string Sanbayden);
        string LayMaDuongBay(string NoiDi, string NoiDen);
        LOAIDICHVU LayLoaiDichVu(string MaLDB);
        CHUYENBAY LayChuyenBay(string MaCB);
        IEnumerable<LOAIDICHVU> LayDSCacDichVu(string MaCB, int soluongdatve);
        IEnumerable<LOAIDICHVU> LayDSCacDichVu();
        HANHKHACH LayHanhKhach(string cmnd);
        HANHKHACHTHANTHIET LayHKTT(string name, string pass);
        bool KiemtraHK(string cmnd, string macb);
        string DatVe(InfoFlight info);
        List<SANBAY> LayHanhTrinh(string macb);
        bool HamKiemTraHuyVe();
        bool ThanhToanVe(string mave);
        #endregion

        #region Offline
        VECHUYENBAY LayVeChuyenBay(string mave);
        IEnumerable<CHUYENBAY> LayDSChuyenBay(string mave);
        IEnumerable<CHUYENBAY> LayDSCB(string madb, string madv, int sl);
        void CapNhatVe(string maVe, string maCbdi, string maCbve);
        DICHVU KiemTraDoiNgayBay(string madv);
        #endregion

        #region CheckIn
        VECHUYENBAY GetVeByMaVe(string Ho, string Ten, string MaVe);
        CT_VECHUYENBAY GetVeByMaCB(string Ho, string Ten, string MaCB);
        Boolean IsCheck(string TrangThai, string LoaiVe);
        Boolean CheckStatus(string MaVe);
        void CIn(string MaVe, Boolean Status, string LoaiVe);
        IEnumerable<CT_VECHUYENBAY> GetInfo(string Mave, string LoaiVe, Boolean Status, int SoLuong);
        int CheckTime(DateTime NgayDi);
        Boolean CheckWhere(string NoiDi, string MaVe);
        Boolean IsRelation(string MaHK);
        void IncreaseMark(string MaHk, int diem = 1);
        void CommitChanges();
        #endregion

        #region Customer
        IEnumerable<HANHKHACHTHANTHIET> LayDSHKTT();
        HANHKHACHTHANTHIET LayHKTT(string mahk);
        void CapNhatHK(string mahk, HANHKHACHTHANTHIET hk);
        void TaoHK(HANHKHACHTHANTHIET hk);
        void XoaHK(string mahk);
        IEnumerable<CT_VECHUYENBAY> LayDSCTV(string mahk);
        #endregion

        #region Flight Info
        List<SelectListItem> LayDSTP();
        List<SelectListItem> LayDSTPDen(string id);
        List<SelectListItem> LayDSTPDi(string id);
        List<SelectListItem> LayMaDB_BayThang(string sbdi, string sbden);
        List<SelectListItem> LayMaDB_HopTac(string sbdi, string sbden);
        int? LayThoiGianBay(string maDb);
        List<SelectListItem> LayDSMayBay(string loaidb, DateTime ngaydi, DateTime ngayden);
        List<SelectListItem> LayHanhTrinh(string sbdi, string sbden);
        List<FlightItem> LaySanBay(string madb);

        #region Tạo chuyến bay
        bool CreateFlight(FlightItem flight, string mamb, int loaicb, int khuyenmai);
        string CreateFlight(DateTime ngaydi, string madb, int khuyenmai);
        bool CreateFlight(FlightItem flight, string mamb, int loaicb, string macb, int stt);
        #endregion

        List<CHUYENBAY> ListFlightNow();
        List<CHUYENBAY> ListFlightPast();
        bool KiemTraMB(string mamb, DateTime dtdi, DateTime dtden);

        // Edit Flight
        FlightItem LayThongTinChuyenBay(CHUYENBAY cb);
        List<FlightItem> LayThongTinChuyenBay(CHUYENBAY cb, int dif);
        #region cập nhật chuyến bay log
        // thay đổi trạng thái
        bool CapNhatChuyenBayLog(string trangthaichuyenbay, string manv, string macb, string lydo, DateTime ngaychinhsua);
        // thay đổi máy bay
        bool CapNhatChuyenBayLog(string mamb, string manv, string macb, string lydo, DateTime ngaychinhsua, int dif = 1);
        // thay đổi ngày đi
        bool CapNhatChuyenBayLog(DateTime ngaydi, string manv, string macb, string lydo, DateTime ngaychinhsua);
        // thay đổi trang thái và ngày đi
        bool CapNhatChuyenBayLog(string trangthaichuyenbay, DateTime ngaydi, string manv, string macb, string lydo, DateTime ngaychinhsua);
        // thay đổi máy bay và ngày đi
        bool CapNhatChuyenBayLog(string mamb, DateTime ngaydi, string manv, string macb, string lydo, DateTime ngaychinhsua, int dif = 1);
        // thay đổi máy bay và trạng thái
        bool CapNhatChuyenBayLog(string mamb, string trangthaichuyenbay, string manv, string macb, string lydo, DateTime ngaychinhsua);
        // thay đổi cả 3
        bool CapNhatChuyenBayLog(string trangthaichuyenbay, string mamb, DateTime ngaydi, string manv, string macb, string lydo, DateTime ngaychinhsua);
        // thay doi all
        bool CapNhatChuyenBayLog(int? khuyenmai, string trangthaichuyenbay, string mamb, DateTime? ngaydi, string manv, string macb, string lydo, DateTime ngaychinhsua);
        #endregion

        bool CapNhatChuyenBay(FlightItem fitem);

        #endregion

        #region Router
        List<SelectListItem> LayDsSanBay();
        List<DUONGBAY> DSDuongBay();
        List<DUONGBAY> DSDuongBayKhac();
        bool CapNhatDuongBay(DUONGBAY dbay);
        #endregion

        
    }
}